/**
 * Chrome Extension 通信桥梁脚本
 * 运行在 ISOLATED world，负责转发 MAIN world 与 background.js 之间的消息
 */
class ExtensionBridge {
    constructor() {
        this.pendingRequests = new Map();
        this.init();
    }

    /**
     * 初始化桥梁，设置事件监听器
     */
    init() {
        // 监听来自 MAIN world 的消息
        document.addEventListener('extension-message', this.handleMainWorldMessage.bind(this));
        
        // 监听来自 background.js 的响应
        if (chrome.runtime && chrome.runtime.onMessage) {
            chrome.runtime.onMessage.addListener(this.handleBackgroundResponse.bind(this));
        }
        
        console.log('[Bridge] Extension bridge initialized');
    }

    /**
     * 处理来自 MAIN world 的消息
     * @param {CustomEvent} event - 自定义事件
     */
    handleMainWorldMessage(event) {
        const { requestId, type, data, needsResponse } = event.detail;
        
        try {
            if (needsResponse) {
                // 需要响应的消息
                chrome.runtime.sendMessage({ type, data }, (response) => {
                    this.sendResponseToMainWorld(requestId, response);
                });
            } else {
                // 不需要响应的消息
                chrome.runtime.sendMessage({ type, data });
            }
        } catch (error) {
            console.error('[Bridge] Failed to send message to background:', error);
            if (needsResponse) {
                this.sendResponseToMainWorld(requestId, { error: error.message });
            }
        }
    }

    /**
     * 处理来自 background.js 的响应
     * @param {Object} message - 响应消息
     * @param {Object} sender - 发送者信息
     * @param {Function} sendResponse - 响应函数
     */
    handleBackgroundResponse(message, sender, sendResponse) {
        // 如果是主动推送的消息，转发给 MAIN world
        if (message.type && !message.requestId) {
            this.sendMessageToMainWorld(message.type, message.data);
        }
    }

    /**
     * 发送响应给 MAIN world
     * @param {string} requestId - 请求ID
     * @param {Object} response - 响应数据
     */
    sendResponseToMainWorld(requestId, response) {
        const event = new CustomEvent('extension-response', {
            detail: { requestId, response }
        });
        document.dispatchEvent(event);
    }

    /**
     * 发送消息给 MAIN world
     * @param {string} type - 消息类型
     * @param {Object} data - 消息数据
     */
    sendMessageToMainWorld(type, data) {
        const event = new CustomEvent('extension-push', {
            detail: { type, data }
        });
        document.dispatchEvent(event);
    }
}

// 初始化桥梁
new ExtensionBridge();